home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-11 / fdical.zip / EV_MAINT.PRG < prev    next >
Text File  |  1993-01-04  |  8KB  |  268 lines

  1. *  EV_maint.PRG
  2. module = [EV]
  3. proc_keys = [CFP]
  4.  
  5. wtitle  = [ ──Date───┬─Whom─┬───────Event──────────]
  6. wfields = [DTOC(date)+' │ '+whom+'  │ '+event]
  7. mtitle  = [Schedules]
  8.  
  9. DO whom
  10. DO events
  11. browmenu = [+Copy]
  12. mprompt = '         / for menu,  [F10] for calendar'
  13.  
  14. PRIVATE last_date
  15. last_date = DATE()
  16.  
  17. SOFT(DATE())                 &&  get close to today
  18. SET KEY -9 TO cal_list       &&  see below
  19.  
  20. DO browse WITH 6,2,20,44
  21.  
  22. SET KEY -9 TO
  23.  
  24. CLOSE DATA
  25. RETURN
  26.  
  27.  
  28. PROC ev_gets
  29.   PARAM mrow
  30.   IF adding()
  31.      M->date = M->last_date
  32.   ENDIF
  33.   @ mrow,left_col+4  GET M->date   VALID ! EMPTY(M->date)
  34.   @ mrow,col()+3     GET M->whom       PICT [@!]
  35.   @ mrow,col()+4     GET M->event
  36. RETURN
  37.  
  38. PROC ev_F
  39.   @ 24,0
  40.   IF INDEXORD() = 1
  41.      IF yes_no([Switch to BY WHOM index?])
  42.         SET ORDER TO 2
  43.      ENDIF
  44.   ELSE
  45.      IF yes_no([Switch to DATE index?])
  46.         SET ORDER TO 1
  47.      ENDIF
  48.   ENDIF
  49.  
  50.   @ 24,0
  51.   IF INDEXORD() = 1
  52.      M->date = CTOD([])
  53.      @ 24,0 SAY [Find ] GET M->date
  54.      READ
  55.      soft( DTOS(M->date) )
  56.   ELSE
  57.      M->date = CTOD([])
  58.      M->whom = SPAC(LEN(whom))
  59.      @ 24,0 SAY [Find ] GET M->whom PICT [@!]
  60.      @ 24,COL() SAY [  starting at ] GET M->date
  61.      READ
  62.      soft(M->whom+DTOS(M->date) )
  63.   ENDIF
  64.  
  65.   mloop = .F.
  66. RETURN
  67.  
  68. PROC ev_P    && Print
  69.    oldrec = RECNO()
  70.    M->thru = LDOM(LDOM(DATE())+1)
  71.    BEGIN SEQUENCE
  72.       @ 24,0
  73.       @ 24,0 SAY [Print calendar for month ending ] GET M->thru
  74.       READ
  75.       ESCBREAK([leave open])
  76.  
  77.       DO printit
  78.       ESCBREAK([leave open])
  79.       DO cal_rep1 WITH []                   ,;
  80.                    []                       ,;
  81.                    m->thru                  ,;
  82.                    [date]                   ,;
  83.                    [Company Calendar for]
  84.  
  85.    END SEQUENCE
  86.    DO closeit
  87.    GOTO oldrec
  88.    mloop = .F.
  89. RETURN
  90.  
  91.  
  92. PROC ev_C     && Copy
  93.    PRIVATE i,mfrom,mthru
  94.    BEGIN SEQUENCE
  95.       STORE events->date+1 TO mfrom, mthru
  96.       @ 24,0
  97.       @ 24,0 SAY [Copy to ] GET M->mfrom VALID ! EMPTY(mfrom)
  98.       @ 24,COL() SAY [ thru ] GET M->mthru VALID mthru >= mfrom
  99.       READ
  100.       ESCBREAK([leave open])
  101.  
  102.       M->date  = events->date
  103.       M->whom  = events->whom
  104.       M->event = events->event
  105.       FOR i = M->mfrom TO M->mthru
  106.          IF add_rec(5)
  107.             REPLA date  WITH i                 ,;
  108.                   whom  WITH M->whom           ,;
  109.                   event WITH M->event
  110.             UNLOCK
  111.          ENDIF
  112.       NEXT i
  113.  
  114.    END SEQUENCE
  115.    mloop = .F.
  116. RETURN
  117.  
  118.  
  119.  
  120. PROC cal_list   && pops-up a calendar, and uses date as the group
  121.    *   Returns to your browse program on ESC, Enter, A)dd, or E)dit.
  122.    *   We might be able to infer the field name from indexkey(0).
  123.    PRIVATE _date, cal[7*6], colnames[7],tab[7],i,group,group_key,date_field
  124.    AFILL(cal,[])
  125.    colnames[1] = [Sun]
  126.    colnames[2] = [Mon]
  127.    colnames[3] = [Tue]
  128.    colnames[4] = [Wed]
  129.    colnames[5] = [Thu]
  130.    colnames[6] = [Fri]
  131.    colnames[7] = [Sat]
  132.  
  133.    tab[1]   =  50
  134.    FOR i = 2 TO 7
  135.      tab[i]   =  tab[i-1] + 4
  136.    NEXT i
  137.  
  138.    *-----Parse the group_key from the INDEXKEY(0), up to the end of DTOS()
  139.    _index_exp  = INDEXKEY(0)
  140.    IF ! [DTOS] $ _index_exp
  141.       BREAK
  142.    ENDIF
  143.    _date_start = AT([DTOS(], _index_exp) + 5
  144.    IF _date_start > 6  && part of the index is left of the date
  145.       _left_exp  = SUBS(_index_exp, 1, _date_start - 7)
  146.       _big_group = &_left_exp
  147.    ELSE
  148.       _big_group = []
  149.    ENDIF
  150.    _date_len   = AT([)], SUBS(_index_exp, _date_start)) - 1
  151.    _date_field = SUBS(_index_exp, _date_start, _date_len)  && from the database
  152.    group_key   = SUBS(_index_exp, 1, _date_start + _date_len)
  153.    _date = &_date_field      && a field from the database
  154.  
  155.    PRIVATE key,  first_date, cal_screen
  156.  
  157.    BEGIN SEQUENCE
  158.    *--------display the month box-----------------------------------
  159.    line24     = SAVESCR(24,0,24,79)    &&  save line 24
  160.    cal_screen = BOX(12,tab[1]-2,7,29,(CMON(_date)+[ ]+STR(YEAR(_date),4,0)), .T.)
  161.    FOR i = 1 TO 7
  162.       @ 15,tab[i] SAY colnames[i]
  163.    NEXT i
  164.    @ 24,0
  165.    @ 24,0 SAY [Use arrows to move within the month,  Page to other months.]
  166.  
  167.  
  168.    DO WHIL .T.   && while they stay in calendar help
  169.       *----------display the current month name------------------------
  170.       @13,tab[1] SAY CENTER( CMON(_date)+[ ]+STR(YEAR(_date),4,0), 28)
  171.       @16,tab[1] CLEAR TO 21,tab[7]+2
  172.  
  173.       FOR i = (M->_date - DAY(_date)+ 1 ) TO  LDOM(M->_date)
  174.          @ 15+_WEEK(i),tab[DOW(i)] SAY DAY(i) PICT [99]
  175.       NEXT i
  176.       first_date = _date - DAY(_date) + 1
  177.  
  178.       DO WHIL .T.
  179.          *------list just the current date in browse window----------------
  180.          group     = M->_big_group + DTOS(M->_date)
  181.          TOP()
  182.          DO list_em
  183.  
  184.          * say the current date in another color:
  185.          CO_PUSH()
  186.          CO_CHG(c_pop3,c_text)
  187.          @ 15+_WEEK(_date),tab[DOW(_date)]  SAY DAY(_date) PICT [99]
  188.          CO_POP()
  189.  
  190.          M->key = INKEY(0)   && wait for a key
  191.          @ 15+_WEEK(_date),tab[DOW(_date)]  SAY DAY(_date) PICT [99]
  192.          M->char = UPPER(CHR(M->key))
  193.  
  194.          DO CASE
  195.             CASE M->key = 13 .OR. M->char = [E] .OR. M->key = 27
  196.                @ cur_row,left_col+1 CLEAR TO cur_row,right_col-1
  197.                @ cur_row,left_col+4 SAY &wfields
  198.                M->white = ! white
  199.                DO rev_line
  200.                BREAK
  201.  
  202.             CASE M->key = 27        && escape
  203.                BREAK
  204.  
  205.             CASE M->char = [A]
  206.                M->white = ! white
  207.                KEYBOARD [A]
  208.                BREAK
  209.  
  210.             CASE M->key = 24         && down
  211.                _date = _date + 7
  212.  
  213.             CASE M->key = 5           && up
  214.                _date = _date - 7
  215.  
  216.             CASE M->key = 4              && right
  217.                _date = _date + 1
  218.  
  219.             CASE M->key = 19             && left
  220.                _date = _date - 1
  221.  
  222.             CASE M->key = 1       && home
  223.                _date = _date - DAY(_date) + 1
  224.  
  225.             CASE M->key = 6     && end - go to the end in any direction
  226.                @ 24,77 SAY [END]
  227.                key = INKEY(0)
  228.                DO CASE
  229.                   CASE M->key = 24                                            && down
  230.                      _date = _date + 7 * (_WEEK(LDOM(_date)) - _WEEK(_date))
  231.  
  232.                   CASE M->key = 5                                             && up
  233.                      _date = _date + 7 * (1- _WEEK(_date))
  234.  
  235.                   CASE M->key = 4                                             && right
  236.                      _date = _date + 7 - DOW(_date)
  237.  
  238.                   CASE M->key = 19                                            && left
  239.                      _date = _date - DOW(_date) + 1
  240.  
  241.                   CASE M->key = 6 .OR. M->key = 1      && end or home
  242.                      _date = LDOM(_date)
  243.                ENDCASE
  244.                @ 24,77 SAY [   ]
  245.  
  246.             CASE M->key = 3   && pagedown -- same day of next month
  247.                _date = ADDMON(_date,1)
  248.  
  249.             CASE M->key = 18  && pageup -- same day of prior month
  250.                _date = ADDMON(_date,-1)
  251.          ENDCASE
  252.  
  253.          IF _date > LDOM(M->first_date) .OR. _date < M->first_date
  254.             EXIT     && have moved into another month
  255.          ENDIF
  256.       ENDDO
  257.       *  want to display another month
  258.    ENDDO
  259.  
  260.    END SEQUENCE
  261.    *CO_POP()
  262.    RESTSCR(cal_screen)
  263.    RESTSCR(line24)
  264.    last_date = m->_date
  265. RETURN
  266. *** eof ***
  267.  
  268.